home *** CD-ROM | disk | FTP | other *** search
/ PC Open 95 / PC Open 95 CD1.bin / cifratura / Rip Coder / ripcoder15f / HeadCut / Src / RIPHeadCut.dpr
Encoding:
Text File  |  2003-04-15  |  3.2 KB  |  111 lines

  1. { ********************************************************
  2.   HEAD_DROPPER for rip files v1.00 (c) Ruzaev Sergei '2003
  3.   ********************************************************}
  4.  
  5. program RIPHeadCut;
  6.  
  7. {$APPTYPE CONSOLE}
  8.  
  9. uses
  10.   SysUtils;
  11.  
  12. type
  13.  tOperation = (OP_CUT,OP_RESTORE);
  14.  
  15. var
  16.  File1Name,
  17.  File2Name      : string;
  18.  File1,
  19.  File2          : integer;
  20.  operation      : tOperation;
  21.  opCode         : string;
  22.  hex            : string;
  23.  RIP_Header     : array[0..11] of byte;
  24.  RIP_Block      : array[0..99] of byte;
  25.  
  26. function GET_HEX: string;
  27. const
  28.  hextable       : array[0..15] of char =
  29.  ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
  30. var
  31.  i                  : integer;
  32. begin
  33.  result := '';
  34.  for i:=0 to sizeof(RIP_Header)-1 do
  35.   result := result+hextable[RIP_Header[i] and $f0 shr $04]+
  36.                    hextable[RIP_Header[i] and $0f];
  37. end;
  38.  
  39. procedure SET_HEX;
  40. var
  41.  i                  : integer;
  42. begin
  43.  i := 1;
  44.  repeat
  45.  if hex[i] in ['0'..'9'] then
  46.   RIP_Header[pred(i) shr 1] := (ord(hex[i])-ord('0')) shl $04  else
  47.   RIP_Header[pred(i) shr 1] := (ord(hex[i])-ord('A')+$0A) shl $04;
  48.  inc(i);
  49.  if hex[i] in ['0'..'9'] then
  50.   inc(RIP_Header[pred(i) shr 1],ord(hex[i])-ord('0')) else
  51.   inc(RIP_Header[pred(i) shr 1],ord(hex[i])-ord('A')+$0A);
  52.  inc(i);
  53.  until i>sizeof(RIP_Header) shl 1;
  54. end;
  55.  
  56. begin
  57.   if paramcount<3 then
  58.    begin
  59.    writeln('*******************************');
  60.    writeln('Head dropper for RIPcoder v1.00');
  61.    writeln('*******************************');
  62.    writeln('Please use RIPHeadCut.EXE <option> <file_IN> <file_OUT> [$CUT_HEX]');
  63.    writeln('');
  64.    writeln('Where <option> is:');
  65.    writeln('/d - drop file header');
  66.    writeln('/r - restore file header');
  67.    writeln('');
  68.    writeln('Examples:');
  69.    writeln('RIPHeadCut.EXE /d EncodedFile.RIP NoHeadFile.RAW');
  70.    writeln('or');
  71.    writeln('RIPHeadCut.EXE /r NoHeadFile.RAW EncodedFile.RIP ',
  72.            '$000000000000000000000000');
  73.    exit;
  74.    end;
  75.   File1Name := paramstr(2);
  76.   File2Name := paramstr(3);
  77.   opCode := lowercase(paramstr(1));
  78.   if pos('d',opCode)<>0 then operation := OP_CUT else
  79.   if pos('r',opCode)<>0 then operation := OP_RESTORE else
  80.    begin
  81.    writeln('Unknown operation : '+paramstr(1)); exit;
  82.    end;
  83.   if not fileExists(File1Name) then
  84.    begin
  85.    writeln('invalid file: '+File1Name); exit;
  86.    end;
  87.   if operation=OP_RESTORE then
  88.    begin
  89.    if (paramcount<4) or (pos('$',paramstr(4))<>1) or
  90.       (length(paramstr(4))<>sizeof(RIP_Header) shl 1+1) then
  91.     begin
  92.     writeln('Invalid hex parameter'); exit;
  93.     end;
  94.    hex := uppercase(paramStr(4)); system.Delete(hex,1,1); SET_HEX;
  95.    end;
  96.   File1 := FileOpen(File1Name,fmOpenRead);
  97.   File2 := FileCreate(File2Name);
  98.   if operation=OP_CUT then
  99.    FileRead(File1,RIP_Header[0],sizeof(RIP_Header)) else
  100.    FileWrite(File2,RIP_Header[0],sizeof(RIP_Header));
  101.   repeat until FileWrite
  102.    (File2,RIP_Block[0],FileRead(File1,RIP_Block[0],sizeof(RIP_Block)))=0;
  103.   FileClose(File1);
  104.   FileClose(File2);
  105.   if operation=OP_CUT then
  106.    begin
  107.    writeln('!!! Please remember this hex, you will use it later to restore.');
  108.    writeln('HEX: $'+GET_HEX);
  109.    end;
  110. end.
  111.